import java.util.Arrays;
import java.util.Random;
import java.util.HashSet;
import java.util.Set;

/**
 * 双色球工具类，包含生成随机号码、校验输入、格式处理等功能
 */
public class Text2 {
    private static final Random random = new Random();

    /**
     * 生成随机的红球号码（6个不重复，1-33之间）
     * @return 红球号码数组
     */
    public static int[] generateRedBalls() {
        int[] redBalls = new int[6];
        Set<Integer> ballsSet = new HashSet<>();
        while (ballsSet.size() < 6) {
            int ball = random.nextInt(33) + 1; // 1-33的随机数
            ballsSet.add(ball);
        }
        // 转换为数组并排序
        int index = 0;
        for (int ball : ballsSet) {
            redBalls[index++] = ball;
        }
        Arrays.sort(redBalls);
        return redBalls;
    }

    /**
     * 生成随机的蓝球号码（1-16之间）
     * @return 蓝球号码
     */
    public static int generateBlueBall() {
        return random.nextInt(16) + 1; // 1-16的随机数
    }

    /**
     * 生成5注完整的彩票号码（每注6红+1蓝）
     * @return 5注号码的二维数组，每注长度为7
     */
    public static int[][] generateFiveTickets() {
        int[][] tickets = new int[5][7];
        for (int i = 0; i < 5; i++) {
            int[] redBalls = generateRedBalls();
            int blueBall = generateBlueBall();
            System.arraycopy(redBalls, 0, tickets[i], 0, 6);
            tickets[i][6] = blueBall;
        }
        return tickets;
    }

    /**
     * 校验用户输入的红球号码是否合法
     * @param redBalls 红球号码数组
     * @return 合法返回true，否则返回false
     */
    public static boolean validateRedBalls(int[] redBalls) {
        if (redBalls.length != 6) return false;
        Set<Integer> ballsSet = new HashSet<>();
        for (int ball : redBalls) ballsSet.add(ball);
        if (ballsSet.size() != 6) return false;
        for (int ball : redBalls) {
            if (ball < 1 || ball > 33) return false;
        }
        return true;
    }

    /**
     * 校验用户输入的蓝球号码是否合法
     * @param blueBall 蓝球号码
     * @return 合法返回true，否则返回false
     */
    public static boolean validateBlueBall(int blueBall) {
        return blueBall >= 1 && blueBall <= 16;
    }

    /**
     * 解析用户输入的号码字符串
     * @param input 输入字符串，格式如"03 12 18 22 27 33 09"
     * @return 解析后的号码数组，前6个为红球，最后1个为蓝球；解析失败返回null
     */
    public static int[] parseInput(String input) {
        try {
            String[] parts = input.trim().split("\\s+");
            if (parts.length != 7) return null;
            int[] numbers = new int[7];
            for (int i = 0; i < 7; i++) {
                numbers[i] = Integer.parseInt(parts[i].replaceFirst("^0+(?!$)", ""));
            }
            return numbers;
        } catch (NumberFormatException e) {
            return null;
        }
    }

    /**
     * 将号码数组格式化为带前导零的字符串
     * @param redBalls 红球数组
     * @param blueBall 蓝球
     * @return 格式化后的字符串，如"05 10 15 20 25 30 08"
     */
    public static String formatNumbers(int[] redBalls, int blueBall) {
        StringBuilder sb = new StringBuilder();
        for (int ball : redBalls) {
            sb.append(String.format("%02d ", ball));
        }
        sb.append(String.format("%02d", blueBall));
        return sb.toString().trim();
    }
}